package com.eduagent.xwqeduagent.api.InstantVoiceToTextConversion.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 讯飞语音听写请求数据模型
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RequestData {
    /**
     * 公共参数，仅在握手成功后首帧请求时上传
     */
    private Common common;
    
    /**
     * 业务参数，仅在握手成功后首帧请求时上传
     */
    private Business business;
    
    /**
     * 业务数据流参数
     */
    private AudioData data;
    
    /**
     * 公共参数
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Common {
        /**
         * 应用ID
         */
        @JsonProperty("app_id")
        private String appId;
    }
    
    /**
     * 业务参数
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Business {
        /**
         * 语言
         */
        private String language;
        
        /**
         * 领域
         */
        private String domain;
        
        /**
         * 方言
         */
        private String accent;
        
        /**
         * 后端点检测静默时间
         */
        @JsonProperty("vad_eos")
        private Integer vadEos;
        
        /**
         * 动态修正
         */
        private String dwa;
        
        /**
         * 领域个性化参数
         */
        private String pd;
        
        /**
         * 是否开启标点符号
         */
        private Integer ptt;
        
        /**
         * 标点返回位置控制
         */
        private Integer pcm;
        
        /**
         * 字体
         */
        private String rlang;
        
        /**
         * 是否返回端点帧偏移值
         */
        private Integer vinfo;
        
        /**
         * 是否以阿拉伯数字格式返回
         */
        private Integer nunum;
        
        /**
         * speex音频帧长
         */
        @JsonProperty("speex_size")
        private Integer speexSize;
        
        /**
         * 句子候选结果数量
         */
        private Integer nbest;
        
        /**
         * 词语候选结果数量
         */
        private Integer wbest;
    }
    
    /**
     * 音频数据
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class AudioData {
        /**
         * 音频状态，0-第一帧，1-中间帧，2-最后一帧
         */
        private Integer status;
        
        /**
         * 音频格式
         * audio/L16;rate=16000 - 16k采样率
         * audio/L16;rate=8000 - 8k采样率
         */
        private String format;
        
        /**
         * 编码格式
         * raw - PCM原始音频
         * speex - speex压缩后的音频（8k）
         * speex-wb - speex压缩后的音频（16k）
         * lame - mp3格式
         */
        private String encoding;
        
        /**
         * 音频数据，base64编码
         */
        private String audio;
    }
} 